3
תגובות
אני מתכנת משחק דפדפן. יש לי טבלת יוזרים וטבלת נשקים.
דוגמא לשורה מטבלת הנשקים (יש עוד טורים אבל זה העקרוניים למקרה שלי):
id 1
name 'Good Weapon'
power '20'

וכך הלאה כי ישנם הרבה סוגים של נשקים.

אני רוצה עכשיו לעשות אופציה שהיוזרים יקנו נשקים. השאלה היא מה הדרך הכי טובה לעשות את זה? (אין אופציה למכור חזרה את הנשקים, כשקונים זה לתמיד)
חשבתי לפתוח טבלה חדשה בשם 'weapons_of_users' ולעשות אותה כך:
id 1
user_id 1
weapon_id 3
amount 20

מה דעתכם?

זה אומר שכל פעם שאצטרך לחשב את כוח השחקן אצטרך לעבור על כלל הטבלה, לחשב כמה כמות יש מכל נשק ואז להכפיל(כמות נשק * כוח הנשק).
נ.ב. אשמח מאוד לעזרה איך כותבים את השאילתה הזאת?
אסביר איך היא צריכה לפעול:
צריך לחשב כמות של כל נשק(לפי 'weapon_id') מהטבלה `weapons_of_users' של יוזר מסויים (where `user_id` = 1)
ולאחר מכן להכפיל את כמות הנשק בכוח שלו (מהטבלה 'weapons')

נ.ב. אל תציעו לעשות טור בטבלה יוזרס בשם 'power' כיוון ובמקרה שאני משנה את כוח הנשק(אופציה של אדמין מן הסתם), שיהיה אפקטיבי לכל היוזרים...

3 תשובות

avatar ענה intval ב 23 לנובמבר 2013 #

א. אתה עושה את זה נכון
ב. השאילת שלך תהיה כזו

select sum(weapons.power * weapons_of_users.amount)
from weapons_of_users
left join weapons on weapons_of_users.weaponid = weapons.id
where weapons_of_users.userid = 1

ג. כדי שזה יעבוד מהר - אל תשכח להוסיף אינדקסים על השדות:
weapons.id, weapons_of_users.weaponid, weapons_of_users.userid

avatar ענה mtndiv ב 23 לנובמבר 2013 #

תודה רבה לך אלכס. אני יבדוק עוד מעט עם השאילתה עובדת.
נ.ב. יש מצב שאתה מסביר קצת על אינדקסים ולמה זה יהיה מהר יותר?
עוד שאלה, 2 unique זה אפשרי? (שתמיד גם username וגם email יהיה unique)

avatar ענה intval ב 23 לנובמבר 2013 #

על אינדקסים